// static/js/common.js
// 弹框, 复制


// 弹框 :
export function showAlert(message, duration = 2000) {
    const alertBox = document.getElementById('custom-alert');
    alertBox.innerText = message;
    alertBox.style.display = 'block';
    setTimeout(() => {
        alertBox.style.display = 'none';
    }, duration);
}


// 新弹框 :
export function showAlertNew(message, duration = 2000) {
    console.log('调用新弹框');
    const alertBox = document.createElement('div');
    alertBox.className = 'custom-alert-new';
    alertBox.innerText = message;

    // 将弹框添加到文档
    document.body.appendChild(alertBox);

    // 获取当前弹框数量以设置位置
    const alertBoxes = document.getElementsByClassName('custom-alert-new');
    const position = alertBoxes.length > 1
        ? (alertBoxes.length - 1) * (alertBoxes[0].offsetHeight + 10)
        : 0; // 计算新弹框的位置

    alertBox.style.top = `${10 + position}px`; // 每个弹框距离顶部10px，并根据数量调整位置
    alertBox.style.opacity = '0'; // 初始透明度
    alertBox.style.transform = 'translateX(100%)'; // 从右侧滑入

    // 使用 requestAnimationFrame 以确保样式被应用后再添加类
    requestAnimationFrame(() => {
        alertBox.style.transition = 'opacity 0.5s, transform 0.5s'; // 添加过渡效果
        alertBox.style.opacity = '1'; // 设置为不透明
        alertBox.style.transform = 'translateX(0)'; // 移动到最终位置
    });

    setTimeout(() => {
        alertBox.remove(); // 移除弹框
        // 重新调整剩余弹框的位置
        adjustRemainingBoxes();
    }, duration);
}


// 重新调整剩余弹框的位置
function adjustRemainingBoxes() {
    const alertBoxes = document.getElementsByClassName('custom-alert-new');
    for (let i = 0; i < alertBoxes.length; i++) {
        alertBoxes[i].style.top = `${10 + i * (alertBoxes[i].offsetHeight + 10)}px`;
    }
}


// 复制 Json : document.execCommand('copy');
export function copy_common(elementId, successMessage = '复制成功', errorMessage = '没有可复制的内容') {
    // 复制指定的 elementId 对应的内容 :
    const formattedJsonArea = document.getElementById(elementId);
    const jsonData = formattedJsonArea.innerText.trim();

    if (jsonData) {
        const selection = window.getSelection();
        const range = document.createRange();
        range.selectNodeContents(formattedJsonArea);
        selection.removeAllRanges();
        selection.addRange(range);
        document.execCommand('copy');
        selection.removeAllRanges();
        showAlertNew(successMessage);
    } else {
        showAlertNew(errorMessage);
    }
}


// 复制 Text : 浏览器 api 不支持 navigator.clipboard.writeText(Text) 时, 使用该方法 :
export function fallbackCopyTextToClipboard(text, warn_text) {
    const textArea = document.createElement('textarea');
    textArea.value = text;
    document.body.appendChild(textArea);
    textArea.select();
    try {
        document.execCommand('copy');
        showAlertNew(warn_text + '已复制到剪贴板');
    } catch (err) {
        showAlertNew('复制失败: ' + err.message);
    }
    document.body.removeChild(textArea);
}


// 复制 Text : navigator.clipboard.writeText(code)
export function copyToClipboard(element_id, warn_text) {
    var code = document.getElementById(element_id).innerText;
    // 移除 _x000D_ 字符
    code = code.replace(/_x000D_/g, '');

    if (navigator.clipboard) {
        // 现代浏览器支持剪贴板 API
        navigator.clipboard.writeText(code)
            .then(() => {
                showAlertNew(warn_text + '已复制到剪贴板');
            })
            .catch((err) => {
                showAlertNew('复制失败: ' + err.message);
            });
    } else {
        // 退回到旧版的复制方法
        fallbackCopyTextToClipboard(code, warn_text);
    }
}


// 将函数挂载到 window 对象上
window.showAlert = showAlert;  // 弹框 :
window.showAlertNew = showAlertNew;  // 弹框 :
window.fallbackCopyTextToClipboard = fallbackCopyTextToClipboard;  // 旧版浏览器 Api 复制 :
window.copy_common = copy_common;  // 复制 :
window.copyToClipboard = copyToClipboard;  // 复制 :
